﻿#include <iostream>
#include <odb/database.hxx>
#include <odb/transaction.hxx>
#include <odb/mysql/database.hxx>

#include "person.hxx"      // 你的数据模型头文件
#include "person-odb.hxx"  // ODB自动生成的代码（包含person_schema）

using namespace odb::core;

int main() {
  try {
    // ================== 1. 连接数据库 ==================
    odb::mysql::database db(
      "root",       // 数据库用户名（根据实际情况修改）
      "root",   // 数据库密码
      "testdb",    // 数据库名称
      "localhost",  // 主机地址
      3306          // 端口
    );

    // ================== 2. 创建表结构 ==================
    {
      transaction t(db.begin());
      db.execute("DROP TABLE IF EXISTS person");  // 清理旧表
      db.execute(person_schema);                  // 使用生成的建表语句
      t.commit();
      std::cout << "表创建成功\n";
    }

    // ================== 3. 插入数据 ==================
    {
      transaction t(db.begin());
      
      Person alice("Alice", 25);
      Person bob("Bob", 30);

      db.persist(alice);  // 插入数据
      db.persist(bob);

      t.commit();
      std::cout << "插入2条记录\n";
    }

    // ================== 4. 查询所有记录 ==================
    {
      transaction t(db.begin());
      odb::result<Person> result = db.query<Person>();
      
      std::cout << "\n所有记录：\n";
      for (const Person& p : result) {
        std::cout << "ID: " << p.id() 
                  << ", 姓名: " << p.name() 
                  << ", 年龄: " << p.age() << "\n";
      }
      t.commit();
    }

  } catch (const odb::exception& e) {
    std::cerr << "数据库错误: " << e.what() << std::endl;
    return 1;
  }
  return 0;
}